//
//  DownloadDataModel.swift
//  TestActorDownload
//
//  Created by rolodestar on 2025/6/13.
//

typealias DownloadDataModel = DownloadDataModelV3

import SwiftData
import Foundation
@Model
final class DownloadDataModelV1 {
    var id: UUID
    var remoteURL: URL
    var localPath: String? // 本地存储路径
    var status: DownladStatus // 下载状态（排队、下载中、暂停、完成）
    var resumeData: Data? // 断点续传数据
    
    
    
    init(id: UUID, remoteURL: URL) {
        self.id = id
        self.remoteURL = remoteURL
        self.status = .queued
    }
}

//
@Model
final class DownloadDataModelV2 {
    var id: UUID
    var remoteURL: URL
    var localPath: URL? // 本地存储路径
    var status: DownladStatus // 下载状态（排队、下载中、暂停、完成）
    var resumeData: Data? // 断点续传数据
    var currentProcess: Double // 当前下载进度
   
    init(id: UUID, remoteURL: URL) {
        self.id = id
        self.remoteURL = remoteURL
        self.status = .queued
        self.currentProcess = 0
        if localPath != nil {
            currentProcess = 1 
        }
    }
}

@Model
final class DownloadDataModelV3 {
    var id: UUID
    var remoteURL: URL
    var localStoredFilePath: URL? // 本地存储路径
    var status: DownladStatus // 下载状态（排队、下载中、暂停、完成）
    var resumeData: Data? // 断点续传数据
    var currentProcess: Double // 当前下载进度
   
    init(id: UUID, remoteURL: URL) {
        self.id = id
        self.remoteURL = remoteURL
        self.status = .queued
        self.currentProcess = 0
        if localStoredFilePath != nil {
            currentProcess = 1
        }
    }
}

extension DownloadDataModel: DownloadTaskForSwiftDataDelegate,DownloadTaskForSwiftDataProtocol{
    
    
//    func updateDownloadStatus(id: UUID, withStatus status: DownladStatus,modelContext: ModelContext?) {
//        self.status = status
//        if modelContext != nil {
//            do{
//                try modelContext!.save()
//            }catch{
//                print(error)
//            }
//        }
//    }
//    
//    func updateDownload(id: UUID, withFinished localFilePath: URL?,modelContext: ModelContext?) {
//        self.localPath = localFilePath
//        if modelContext != nil {
//            do{
//                try modelContext!.save()
//            }catch{
//                print(error)
//            }
//        }
//    }
//    
//    func updateDownloadProgress(id: UUID, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64,modelContext: ModelContext?) {
//        self.currentProcess = Double(totalBytesWritten) / Double(totalBytesExpectedToWrite)
//        if modelContext != nil {
//            do{
//                try modelContext!.save()
//            }catch{
//                print(error)
//            }
//        }
//    }
//    
//    func getResumeData() -> Data? {
//        return resumeData
//    }
    
}
